\documentclass[empty]{ctexart}
\usepackage{geometry}
\geometry{a0paper,hmargin=160mm,vmargin=10mm}
\usepackage{algorithm2e}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage{graphicx}
\begin{document}
  \twocolumn
  \begin{algorithm}
    \setcounter{AlgoLine}{-1}
    \linespread{1.5}\selectfont
    \Huge
      \LinesNumbered
      \KwIn{$|V|=2n$的图$G(V,E)$}
      \KwOut{划分后的图$G(V,E)$}
      \nl $(A,B)\leftarrow \text{initial\_partition(G)}$\tcc*[r]{任意初始划分}
      $G_m=\infty$\;
      \While{$G_m>0$}{
	$i\leftarrow 1$\;
	$\text{order}\leftarrow\varnothing$\;
	\ForEach{$v\in V$}{
	  v.status$\leftarrow$free  \tcc*{将v的状态设为自由}
	  $D[v]\leftarrow \text{compute\_gain}(v)$  \tcc*[r]{计算移动v到另一划分的收益}
	}
	\While{V中存在自由节点}{
	    $\Delta g_i,b_i\leftarrow \text{max\_gain}(A,a_i,B)$\tcc*[r]{在B中找出与$a_i$交换的收益最高的节点和对应的收益}
	    order.append($g_i,a_i,b_i$)\tcc*{记录变化的单元}
	    try\_swap($a_i,b_i,A,B$)\tcc*{移动$a_i$到B，$b_i$到A}
	    $a_i$.status,$b_i$.status$\leftarrow$locked\tcc*{锁定$a_i,b_i$}
	    \ForEach{$v_f\in\{\text{连接到$a_i$或$b_i$的节点集合}\}$}{
	      $D[v_f]\leftarrow$comput\_gain($v_f$)\tcc*{更新受交换影响的节点收益}
	    }
	    $i\leftarrow i+1$\;
	}
	$G_m,m\leftarrow$best\_moves(order)\tcc*{交换序列<1,\ldots,m>} 
	\lIf{$G_m>0$}{confirm\_moves(m)}
      }
      \While{$G_m>0$}{
	$i\leftarrow 1$\;
	$\text{order}\leftarrow\varnothing$\;
	\ForEach{$v\in V$}{
	  v.status$\leftarrow$free  \tcc*{将v的状态设为自由}
	  $D[v]\leftarrow \text{compute\_gain}(v)$  \tcc*[r]{计算移动v到另一划分的收益}
	}
	\newpage
	\While{V中存在自由节点}{
	    $\Delta g_i,b_i\leftarrow \text{max\_gain}(A,a_i,B)$\tcc*[r]{在B中找出与$a_i$交换的收益最高的节点和对应的收益}
	    order.append($g_i,a_i,b_i$)\tcc*{记录变化的单元}
	    try\_swap($a_i,b_i,A,B$)\tcc*{移动$a_i$到B，$b_i$到A}
	    $a_i$.status,$b_i$.status$\leftarrow$locked\tcc*{锁定$a_i,b_i$}
	    \ForEach{$v_f\in\{\text{连接到$a_i$或$b_i$的节点集合}\}$}{
	      $D[v_f]\leftarrow$comput\_gain($v_f$)\tcc*{更新受交换影响的节点收益}
	    }
	    $i\leftarrow i+1$\;
	}
	$G_m,m\leftarrow$best\_moves(order)\tcc*{交换序列<1,\ldots,m>} 
	\lIf{$G_m>0$}{confirm\_moves(m)}
      }
    \end{algorithm}
\end{document}

